--基础部分
--第6课时 table array
t = {1,2,3,4,5,"xusan"}
for i=1,#(t) do
  print(i..":"..t[i])
end

function clone(source)
	local ret = nil
    ret = jsonLib.encode(source)  
    return jsonLib.decode(ret)
end

 -- 第7课时 table object or dict
t = {id=5,name="xusan",sort=3,18}   -- {["id"]=5,["name"]="xusan"..}

for key,val in pairs(t) do    -- for  in 
	print(key, val)
end
--传引用
p = clone(t)
p.id = "su"
print(p)
print(t)
p = {1,4,6}
for key,val in pairs(p) do    -- for  in 
	print(key, val)
end



--第8课时 再说循环 和 local
local i = 1

while i<=10 do     -- for
	print(i)
    if i==5 then
    	break      -- 跳出循环 
    end
    i = i+1 
end
exitScript()
repeat    --至少执行一次
	print(i)
    i = i+1
    
until i>10

--第9课时  函数的定义
local i,j = 10, nil 

--[[
function  add(x,y)
	local rs = x + y
    return rs,"add"
end
]]


--第10课时  再说函数
function 判定(age)
	if age>10 then
    	print("去游泳")
    else
    	print("去踢球")
    end
    return 1
end



function 判定1(age)
	if age>10 then
    	print("去游泳")
        return nil
	end
   	print("去踢球")
    return 1
end
]]


--[[
	描述 : 获取数组中的最大元素
    参数 : array 
    返回 : 下标 值
]]
function 获取最大值(数组)
	local max = -1
    local index = -1
    for i=1,#(数组) do
       if 数组[i]>max then
       		max = 数组[i]
            index = i
       end
    end
    return index,max
end




local t = {10,5,19,0,8,99,6}
--local index,max = 获取最大值(t)
--print(index, max)

--第11课时  再说函数 


--[[ 排序   查找]]
local t1 = {id=5, name="xjx"}

--[[
	描述: 查找table中 key 是不是存在
    参数: table ,key
    返回: 1:存在 0 不存在
]]
function key_exists(t,key)
	for k,v in pairs(t) do
    	if k == key then
        	return 1
        end
    end
    return 0
end

--print(key_exists(t1,"id2"))

--[[
	描述: 统计table中值的个数
]]
local t = {10,5,19,10,8,99,6}   -- {10=2,5=1....}  key :value 
function 统计(数组)
	local ret = {} 
    for k,v in pairs(t) do
    	if 1==key_exists(ret,v) then
        	ret[v] = ret[v]+1
        else
        	ret[v] = 1
        end
    end
    return ret
end

print(统计(t))


--[[
	描述: 查找table中 值是不是存在
    参数: table ,val
    返回: 1:存在 0 不存在
]]
function in_array(t,val)
	for k,v in pairs(t) do
		if v == val then
			return 1
		end
	end
	return 0
end

print(in_array(t1,"xjx"))

--第12课时  再说函数 递归 闭包  回调

--[[
    1,1,2, 3, 5.... 
	n! = n * (n-1)!
    1: 必须要有终止条件
    2: 需要调用函数本身
]]
function 阶乘(n)
  if n==1 then
  	return 1
  end
  return n * 阶乘(n-1)
end


function  test()
	local i = 10
    return function()
    	return i + 10
    end
end


--回调  函数作为参数传递
function p(v)
	print(v)
end

function add(i,callback)
	local ret = i+ 10
    callback(ret)
end 


add(10,p)   --第二个参数为 函数 p 
